/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */

// 注册用户的处理函数

// 导入db模块
const db = require('../db/index')

// 导入加密模块
const bcrypt = require('bcryptjs')

// 导入生成token的包
const jwt = require('jsonwebtoken')

// 导入全局配置文件
const config = require('../config')

// 注册处理函数
exports.register = (req, res) => {
  // 获取表单数据
  let userInfo = req.body
  const sql = `select * from ev_users where username=?`
  db.query(sql, userInfo.username, (err, results) => {
    if (err) return res.send({ status: 1, message: err.message })
    if (results.length === 1) {
      return res.send({ status: 1, message: '用户名已存在' })
    }
    // 对用户的密码,进行 bcrypt加密，返回值是加密之后的密码字符串
    userInfo.password = bcrypt.hashSync(userInfo.password, 10)
    let sqlInsert = "insert into ev_users set ?"
    db.query(sqlInsert, userInfo, (err, results) => {
      // 执行 SQL 语句失败
      if (err) return res.send({ status: 1, message: err.message })
      // SQL 语句执行成功，但影响行数不为 1
      if (results.affectedRows !== 1) {
        return res.send({ status: 1, message: '注册用户失败，请稍后再试!' })
      }
      // 注册成功
      res.send({ status: 0, message: '注册成功!' })
    })
  })
}

// 登录的处理函数
exports.login = (req, res) => {
  // 获取表单数据
  let userInfo = req.body
  const sql = `select * from ev_users where username=?`
  db.query(sql, userInfo.username, (err, results) => {
    if (err) return res.send({ status: 1, message: err.message })
    if (results.length !== 1) {
      return res.send({ status: 1, message: '用户名不存在' })
    }
    // 拿着用户输入的密码,和数据库中存储的密码进行对比
    const compareResult = bcrypt.compareSync(userInfo.password,results[0].password)
    if (results.length === 1 && !compareResult) {
      res.send({status:1,message:'密码错误'})
    }
    if (results.length === 1 && compareResult) {
      // 为了安全性将密码头像不用来生成token
      const user = {...userInfo,password:'',user_pic:""}
      // 生成Token
      let token = jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
      token = `Bearer ${token}`
      res.send({status:0,message:'登录成功',token})
    }
  })
}
